- web6047 - (2021/09/10(金) 現在、システム調整中のため、一部の表示がおかしいかもしれません)

[横幅 1024px以下]

web6047 2022年

web6047 2022年

プログラミングやRPG(作るほう)が好きな人の日記

個人的な趣味(プログラミング、イラスト、電子回路)のページです。

自身のパソコンのやりすぎに対する管理の表の公開、

最近見ているアニメや映画と 買い物の簡易なリスト、

それから日記を掲載しています。日記が主体です。

このWeb ページの構造について

ページが少しごちゃごちゃとしているため、このページの全体像をここに示します。

日記へ飛ぶにはここをクリックしてください

パソコン使用時間管理の公開:   パソコン使用時間管理

この表は、このウェブページの管理人のパソコンの使用時間を管理・制限するためのものです。

このようなプライベートなことを公開して、ちょっと恥ずかしいようなところもありますが、公開することでうまくいっているので良しとしています。





































NO PC WEEK に代わる PC 使用制限のしくみ(新β2版)
No. A1.
開始時
運動
A2.
勉 強
1問
A3.
終了時
運動
H1. 予定
作業内容
H2. 予定
作業詳細
判定×の理由
B. 実際
開始時刻
C. 予定
使用時間
(当日限度)
D. 予定
終了時刻
E. 実際
終了時刻
F. 実際
使用時間
G1. 判定
◎ 9分以下
○ 10分~19分
△ 20分~29分
× 30分以上

※表は、新しいシステムへの移行を考えています。最近私は下図のように PC の起動時間を自動で記録しているので、これをもとに表を作れると思います。そうできれば、私の作業はこの記録のテキストファイルをアップロードするだけになって、手間が省けます。

この表の意図:

多くの人はパソコンのやりすぎやネットゲームのやりすぎには困っていると 思います。

参考に言うと、この表を使う前の私は 1 回の PC 使用時間がノンストップで 17 時間というときもあったし、平均で言うと毎日 9 時間はやっていたと思います。

この表を使ってパソコンの使用時間を 事前に決めてネッ ト上に公開 することで、パソコンのやりすぎを防止できたら、と思います。

また、数年前から考えてきましたが、そういう徹夜とか長時間作業をするよ りも、昼間の短時間作業のほうが生産性は高いのではないかと思います。そういう意味でも期待しています。

※以前は NO PC WEEK と称してパソコンを使用しない期間を設けることでやりすぎに対処してきましたが、もっと具合の良い方法はないかと考え、この表を使うようになりました。


臨時お試し(2022年1月8日~)

最近、状況が以下のように少し変化していて…

  • 23時で電源が切れる自動制御がとても強制的で、うまくいっている。
  • 23時以降まったくできなくなり、使用時間が減ってしまった。
  • 最近、通常のPC作業の他に、「PC-9801でのアセンブラ学習」が加わったので、さらに時間が足らなくなった。

…これまでのやり方だとうまくいかないところがあるので、お試しでやり方を少し変更します。

お試しで以下のようにします。

  • 基本的に何時間でもやってよい。
  • ただし、1.5h(または2.0h)ごとに区切り、区切りの際に15分以上 別のことを行う。
    行った内容は、参考のために記録と記録の間に記載する。
  • 使用可能時刻は、昼12:00~夜23:00のあいだ。(自動的に電源制御される)
  • 1.5hの開始時と終了時にこれまでどおり、開始時:運動、勉強、終了時:運動 を行うこと。
  • 以上は平日は火木金のみとし、月水は以下のようにする。
    月水は、「PC-9801でのアセンブラ学習」について基本的に本だけで学習する。
    しかし、必要な場合は1項目に限ってPC-9801の電源を入れて良い。

これがうまくいかない場合は、以上を取り消しします。

(「1.5h(または2.0h)ごとに区切り、」というのが難しいんじゃないかと思う…)

中途結果

  • これまでは 1.5h や 3, 4h の時間制限があったが、このお試しは時間が限られていないので、少し気持ちが楽になって良い。「余計なことで時間を使ってしまった~」というのが無い。


記入の規則:

  • 日付は表示していません(私の生活パターンをすべて知らせるのはよくないから)。しかし、白と灰色の色分けは、同じ色の連続 で同じ日を表しています。
  • 左端の「A1. 運動」、「A2. 1問」、「A3. 運動」について
    この表の目的とは異なりますが、ついでとして、遊び100%の毎日を送るときでも勉強の習慣を忘れないために、たった1問で良い ので解くことにします。
    正直言うと毎回遊ぶ前に必ず1問勉強するのは心が折れそうです。でも慣れさえすれば…と思います。(追記:やってみると結構効果 的で役立っています)
    行ったら◎、行わなかったら× を記入します。
    2020年11月20日ぐらいから「A1. 運動」を追加しました。パソコンを行う前に運動することを強制するものです。腕立て伏せ10回とか腹筋10回とかです。
    (ホントだったら30回くらいはやりたいところですが、私は体の調子が悪いので、10回程度にしています)
    2021年6月26日「A3. 運動」を追加。PC使用の終了時にも運動する。
    A1はPC漬けによる筋力衰え対策の意味で、筋トレを行い、
    A3はPC作業でこった体をほぐす意味で、ラジオ体操やストレッチ体操を行う。
  • 右端の「G. 判定」について
    「D. 予定終了時刻」と「E. 実際終了時刻」を比べて、オーバーした時間によって判定を行います。
    ◎ 9分以下
    ○ 10分~19分
    △ 20分~29分
    × 30分以上 (オーバー理由を記載する。理由の統計を取れば何が問題なのか把握でき、改善しやすいです)
  • 平日の 1.5h、2.0h の PC 使用の連続が負担になっているので、週のスケジュールは下記のようにする。
    月水で PC 使用しないことでうまいぐあいに「体力回復」されて、「生活」がうまく回り、プログラミング以外の「創作活動」(イラスト等)に時間が取れることを期待します。
    月:0h
    火:1.5h
    水:0h
    木:1.5h
    金:1.5h
    土:5hまで(休日で、翌日も休日)
    日:3hまで(休日で、翌日平日) ←早起きなおかつ(日々の買い物とかじゃなく)散歩するなら 3h やって良い
    (※2021年2月2日:週の各時間を調整しました)
    (※2021年12月12日:電源タイマーで23時で終了することに期待できるので土日の各時間を1時間ずつ増やしました)
  • ×、△、"記録しなかった長時間作業" が多いと思ったら、バランスをとるために、NO PC WEEK※ を1週間実施する。
    NO PC WEEK とは私自身の健康のために私のパソコンの使用を制限する期間です)


ちなみに、分単位で記録を取ったりして、だいぶマメに見えるかもしれませんが、Windows の日本語入力(MS-IME)で「いま」と入力し、 変換 キーを押さずに ボタンを押すと現在の時刻になります。道具の便利さが人をマメに見せるのかもしれません。

例外事項:

  • 「E. 実際終了時刻」のあと、プログラミングの場合のみスッパリ終了しないで、今後のプログラミングの方針をテキストファイルに書くのは OK にしています。


「スーパーPC WEEK」:

連休中(3連休以上)に、NO PC WEEK をオフにして好きなだけパソコンを使ってよいとする期間を、「NO PC WEEK」に対して「スーパーPC WEEK」と言う。

ただし以下の決まりを守ること。

  • その日に自由にパソコンを使ってもよいが、1回あたり、いつものように表に記入すること。(開始時運動、勉強1問、終了時運 動も行うこと)
     
  • 1回ごとに、掃除、炊事、洗濯や、別の趣味など、まとまった作業を はさむこと。
     (理由: 1回1回がが連続してつながると回を分けている意味がなくなるから)
  • 24時に就寝するよう努めること。(強制ではないが、つとめること)
     
  • 連休の最終日は通常通りとする。
     
  • 1回の使用時間は2時間を最大とすること。

なお、表の中央やや右寄りの「C. 予定 使用時間(当日限度)」列の "当日限度" には UNLOCK と記入する。


中途結果(2022/4):

(この記事は作成途中です)

現在固まってきた運用の内容をここにまとめます。

個人的ではありますが、自分にとって効果があると思っているものです。

ご参考になれば幸いです。

効果 大:

昼12時に電源供給が開始、夜11時に電源供給が終了するしくみ

電源オンオフタイマーを使用して、パソコンの電源タップへの電力の供給を制御します。

これにより、時間になるとマルチディスプレイの外付けの大きなディスプレイの電源が切れたり、オンされたりします。


パソコンの電源を入れた後、1.5Hで電源が切れる(休止状態になる)しくみ

1.5Hと1.5Hのあいだは15分以上別のことを行うルール

効果 中:

パソコン使用の前後に運動をする。

その他 続けていること:

パソコン使用の前に勉強の問題を1問解く

自分の家族にすすめたい方へ:


(これは イラス トAC の無料素材です)

パソコンのやりすぎやネットゲームのやりすぎは社会問題にもなっているので、「うちの子についてなんとかしないと…」と思っている ご家族の方は多くいらっしゃると思います。

私の両親も過去に私について問題にしていました。学校へ行かず、毎日朝までパソコンに向かい、 悶々としていたんです。


この表はその家族が困っていたときから 30 年後に、私が自分で必要を感じて作ったものです。

私は今 一人暮らしをしていて、自分で生計を立てる中、パソコンにおぼれた生活をすると、生活がうまく回らなくなるんです。

具体的には、

  • 人前で疲れた顔を見せてしまい、人間関係がうまくいかなくなる。もっと具体的には、職場、とこや、お店のレジ、歯医者。
  • 掃除、洗濯、炊事が後回しになり、実質、それらを行う時間がなくなってしまう。深夜遅くや翌日に回したり、行わなかったりす る。

これらを改善するために表を作りました。


でも、このような必要にせまられて「自分の動機で始めた場合」と、「人からすすめられて始めた場合」とでは、結果が異なると思いま す。

自分の切実な動機で始めたなら自分から進んでこの表を活用すると思いますが、外から押し付けられたものはなかなか定着しないもので す。

あまり適当なことは言えませんが、「中途結果」タブの中の青い部分で 書いたことは、本人にとって得になることなので、「ときどき休憩して、他のあの趣味やってみたらどうだ?」とか「ときどき休憩したほ うがプログラミングの質が上がるって話だぞ?」という形ですすめてみたらどうでしょうか。(それでも最終的には自立してもらうことは 必要だと思いますが)


私が両親を困らせていたときに、突然、外へ一人で出て行って、一人暮らしを始めたり、接客業を始めたり、いくつか資格取得したりと いろいろ行えた理由というのは、正直言ってわかりません。(※しかし途中で失業して2度、実家に戻ったことがあります。1 回目は 21 才くらいのときに 5 年間、2 回目は 35 才くらいのときに1年未満、実家にいて、何もしてなかったり働いたりしていました)

私が両親を困らせていたのは 16 才 ~ 20 才くらいの学生のころですが、そのころ家族と私自身と友人たちがみんなそれぞれ、私の生活について心配したり困ったり悩んだり、あの手この手を試したりしていました。そう いう煮詰まったような状況が運命をそのように(解決の方向へ)動かすのかもしれません。運命がどうの というのは変ですが、そのくらいのことしか言えません。何かしら取り組む必要があるということですかね。


この社会問題はクリアーすべきものみたいです。



最近観ているアニメ: 最近観ているアニメ
日 付
(上ほど新しい)
タイトル 無料配信
配信日
公評価 私 評価
2021/7/15~視聴中 ドラゴンボール(リンクは Yahoo GYAO で検索)
冒険・格闘技/1984年週刊少年ジャンプ/各話25分程度
月・水・金・・ ★★★★
4.8
★★★★
4.5
最近観た映画: 最近観た映画

このところ、Yahooの無料映画サービス「GYAO」で映画をいっぱい観ています。

映画の場合は公私それぞれ★ 3.5 以上で黄色塗りにします。★2.9以下は青塗りにします。

■■であれば公私ともに落第点。であれば公私で意見が分かれている。■■であれば公私ともにGOOD。白塗りは可もなく不可もなく。

日 付
(上ほど新しい)
タイトル 無料配信
(日付まで)
公評価 私 評価
2022年5月12日 マイル22(R15+)【吹替版】 (リンクはGYAOで検索)
レビュータイトル:これまでにないような激しい格闘
少しの粉末で、大都市を6つ壊滅させられる爆発力(広島と長崎に落とされた原爆を合わせたくらいの威力)をもつ「セシウム139」をめぐって、アメリカの特殊部隊がセシウムの行方を知る唯一の“重要参考人” を空港まで(22マイル)護送する。
スポンサーが中国だけど、これまでにないような激しい格闘や、銃撃戦、リーダーの厳しさを観ることができた。
いままでさんざん厳しくしてきたけど、もう死ぬしかない部下に「よくやった」と一言いい、爆弾を渡すシーンがとても良い。優しくしてばかりいる私には絶対にできない、すごく良いリーダーの姿だから。 なので高評価にしました。
でも、最後に主人公は勝利できるのかどうか。
オススメ度:おすすめできる
まで 3.3 3.8
2022年5月7日 A.I.ライジング(R15+) (リンクはGYAOで検索)
レビュータイトル:芸術的
女性型アンドロイドと一緒に、彼方4367光年にある星へ宇宙飛行探査しに行く話。
こういう心理状態でのエッチ。ああいう心理状態でのエッチ。などなど様々な心理でのエッチをずらりと見せつけられる。
でも、それらは伏線であって、
そう簡単には描けない微妙なところを 描いていることについて、芸術的、文芸的だと思いました。
芸術家って女性の身体を美の対象としてしか見ないし、産婦人科の医者も患者としてしか見ない。
この映画の制作者はきっとそういうスタイルの持ち主なんだと思います。
私が育てている鉢植えで、いつまでも葉っぱだけで咲かないパンジーがあって、ダメなのか咲かないのかとなかばあきらめていたら、あるとき大きな黄色い花を咲かせた。そのとき嬉しかったんですが、それと似たようなものを描いていると思います。
オススメ度:まぁおすすめできる
2022年6月5日(日) 23:59まで 2.1 4.0
2022年5月5日 ミッション・ブレイブ 欧州警察特殊部隊 (リンクはGYAOで検索)
レビュータイトル:1時間43分だけど、長く感じた。
アルバニア警察によるマフィア掃討作戦。
悪いところ: 内容がオーソドックス(正統的、ありきたり)だったと思う。
良いところ: スパイ疑惑、裏切り、数々の場面、などなどボリュームがあった。
もし主人公がトム・クルーズだったり、キーファ・サザーランドだったり、ブルース・ウィルスだったりすると、またひとあじ違う映画になっただろうなと思う。ヒロインにしても しかり かなぁ。
オススメ度:まぁおすすめできる
まで 3.0 3.2
2022年4月~5月 ザ・アウトロー 【吹替版】 (リンクはGYAOで検索)
ロサンゼルス郡保安局(アメリカの法執行機関の1つ)と伝説の強盗と呼ばれる一味との戦いを描く。
全体的に面白い内容ではあった。
でも終わり方が気に入らなかったです。
主人公は結局この一件で、何かを得たんだろうか??と思いました。
オススメ度:まぁおすすめできる
2022年5月13日(金) 23:59まで 3.8 3.4
2022年4月~5月 カリキュレーター【吹替版】 (リンクはGYAOで検索)
レビュータイトル:灰皿でぶん殴るだけの勇気
惑星XT-59に住み着いた人類と、自分たちで作った惑星管理システム、そして惑星の生物との3つどもえのサバイバルバトル。
「普通のSF」と、「ヒロインの美貌」が楽しめる感じかな。
酷評されているけど、普通の映画だと思います。
でも、ヒロインは、離婚の申請を断った役人を灰皿でぶん殴るだけの勇気があるなら、助けを求める仲間を助けて主人公の男と別行動を取るぐらいのアクションがあっても良かったかもしれない。
オススメ度:まぁおすすめできる
2022年5月31日(火) 23:59まで 2.4 3.5
2022年4月~5月 アンキャニー 不気味の谷 (リンクはGYAOで検索)
人型人工知能「アダム」の学習の傾倒を描くSFホラー。
アンドロイドが女性をのぞくとか、その辺が低俗に思えた。
オススメ度:おすすめできない
2022年5月26日(木) 23:59まで 3.7 1.9
2022年4月~5月 レジェンダリー(2017) (リンクはGYAOで検索)
レビュータイトル:私は面白かったと思う
西欧の中世(中世盛期)、神の奇跡がまだ信じられていたころの、修道士たちの巡礼の旅の話。
RPG にありそうな、勇者、戦士、僧侶のような構成で、かなりリアルな描写で描かれるので、その辺の創作に興味のある人には大いに参考になる内容だと思った。
神の奇跡は果たしてあるのかないのか。
オススメ度:まぁおすすめできる
2022年5月23日(月) 23:59まで 3.1 3.7
2022年4月~5月 タイム・チェイサー (リンクはGYAOで検索)
失踪した父親の謎、残された家族のその後の人生と、その人生をくつがえすタイムマシン技術を描く人間ドラマ。
「シックスセンス」の子役(ハーレイ・ジョエル・オスメント)が大人になって出演している映画。
また、「Xファイル」の初期のヒロインのジリアン・アンダーソンが出ているのも珍しい。
タイムトラベルものだけど、8割くらいは人間ドラマで、最後の最後になって初めてタイムトラベルに挑む。
オススメ度:まぁおすすめできる
5月22日(日) 23:59まで 3.4 3.4
2022年4月~5月 レプリカズ 【吹替版】 (リンクはGYAOで検索)
レビュータイトル:生きてたプリンはプリンだから
家族を失った科学者が、クローン技術と人間の意識のコピー技術を使って、家族の再生を試みる!
もともと生きてた家族と、クローン+記憶のコピーでよみがえった家族。
両者は別人であって、新しい家族と楽しい暮らしをするのは幸せかもしれないけど、死んでしまったほうはどうなるの??
ちょっと前に中国のペットのクローンサービスについてのニュース特集があって、その中である日本のご年配の夫婦の方が、死んだペットについて、
「生きてたプリンはプリンだから」 (ペット名は仮名にしました)
とペットのクローンを作ることを否定していました。
その辺の倫理の問題が、作中で一度も語られないから低評価にしました。
オススメ度:おすすめできない
2022年5月6日(金) 23:59まで 3.8 2.5
2022年4月~5月 ザ・メッセージ 地球侵略 (リンクはGYAOで検索)
レビュータイトル:「Xファイル」のような内容
忌まわしい過去がきっかけで疎遠になっていた妹との再会。そして謎の小さな球体の発見。「Xファイル」のような内容で物語は進む。
起承転結の「転」がないような。やられるままで…といいますか。
「え?終わり?」という感じで終わってしまうのが不満です~
オススメ度:おすすめできない
2022年5月4日(水) 23:59まで 1.4 1.0
2022年4月~5月 オーガストウォーズ (リンクはGYAOで検索)
レビュータイトル:まぁ普通だったかな
2012年ロシア製の、現代の映画技術に通じる戦争スペクタクル・エンターテインメント。
子供の目には何かが確かにそこにいて、でも大人にとっては現実の出来事にしか見えない。
そういうのがどこか「となりのトトロ」みたいだと思いました。

戦争に翻弄(ほんろう、もてあそばれること)される母親と、いつまでも幻想の世界で生きている子供。彼らが最後にどうなるのか。

映画のつくりの幼稚さや未熟さ が苦手な人には見づらいかもしれません。
オススメ度:まぁおすすめできる
無料配信終了 3.1 3.0
2022年4月~5月 ボーン・コレクター 【吹替版】 (リンクはGYAOで検索)
レビュータイトル:やっぱりだ
1999年のアメリカ映画。
アンジェリーナ・ジョリーとデンゼル・ワシントン、そしてこの映画。
いい組み合わせだ…、と思いました。
二人のやりとりが良い感じです。
…リンカーンの生活を支える医療機器の調節に携わる医療技師の人、、なんか顔つきが気になって調べたら、やっぱりだ。映画「セブン」にも出ていました。股に変なの付けてめっちゃおびえてた被害者役の人。
オススメ度:まぁおすすめできる
無料配信終了 3.3 3.6
2022年4月~5月 ブラックホーク・ダウン(2001年) (リンクは 映画.com へ)
ノンフィクション小説を原作とした戦争アクション。
「エイリアン1」、「プロメテウス」のリドリー・スコット監督
1993年のソマリア(アフリカ大陸の最右端)で、アメリカ軍とソマリア民兵とのあいだで発生し、のちにアメリカがソマリア内戦介入から撤収するきっかけとなった戦闘「モガディシュの戦闘」(リンクはWikipedia)を描く。
オススメ度:おすすめだ!
無料配信終了 3.7 3.9
2022年4月~5月 ブラック・バタフライ (リンクはGYAOで検索)
レビュータイトル:話の本筋が単純すぎないか?
「完全に裏切られる驚愕のラスト20分」
賛否両論あるみたいだけど、私はこういうのは好きじゃないです。
すべてを持ち去られた(本当に裏切られた)感じがするので。
オススメ度:おすすめできない
無料配信終了 2.6 2.0

最近買ったもの: 最近買ったもの
日 付
(上ほど新しい)
タイトル 公評価 私 評価
2022/3/1 パソコンの CPU の解説書です。
1994年に刊行された本で、アマゾンで中古で購入しました。
マイクロプロセッサ(CPU)について基本の動作を知っている方が対象の本なので、難しいですが、読むと、みなさんの高評価の通り、486 CPU のしくみをとてもよく理解しながら読み進められます。
Intel 486 CPU は、現在の Intel core i シリーズの基になった CPU であり、技術的に現在にも通用するところがあると思います。学んだことが無駄にならず結構良いと思います。

「486 以上の x86 系 CPU の技術的なところ」と、「情報処理の技術的なところがある程度わかっている人」の橋渡しをしてくれる本だと言えます。
この「はじめて読む 486」が教えてくれていることの内容は結構 難解な内容で、それがもし intel の難しい技術書(見たことありませんが) でしか知ることが出来ないとしたら、理解はほとんど無理なんじゃないか…
そう言えるくらい、難しい内容を分かりやすく説明してくれています。人気があるのも当然です。(これを書いている今は、この本の半分くらいまで読みました)
4.0 4.5
2021/7/9 ゲーム:ザ・トリロジーズ -T&E SOFT / XTAL SOFT COLLECTION-(リ ンクは EGG の当該ページへ)
PCレトロゲームのセット。RPG開発の研究のために予約で購入。
当初「2021年春発売予定」でしたが、コロナウイルス感染拡大の影響で、「2021年夏」に延期され、さらに「2022年2月発売」、「2022年3月」、「2022年4月」と繰り返し延期されています。
私は急いでいないんで、いいんですけどね。
最近やっと「4月上旬発売決定」となりました。

2022年4月17日追記
プラスチックケースはたしかに当時のあの豪華な感じを体感できました。なつかしくて嬉しかったです。
売り切れするほど好評みたいです。 4.0


自己紹介: 自己紹介

47才、男、B型(BB)

電子機器の基板を製造する工場で、派遣で働いています。

プログラミングが好きで小学校5年生のころからずっと続けています。

ページ上にていろいろ才能(少々 粗削りな才能)を発揮していると思いますが、なるべく自 分だけで終わらないようにといつも思っています。

いろいろ厳しい考え方も持っていますが、厳しすぎないように周囲の人々とのバランスも考えていま す。

たとえば、著作権について私はだいぶ細かく考えていますが、私以外の人について 特に厳しく言ったり批判的に見たりはしません。

著作権は難しいし、ちょっとぐらい いいじゃないか、という人間らしい気持ちを肯定したいからです。

■趣味: プログラミング、ゲーム音楽を集めて聴く、イラストを描く、映画、アニメ、ガンプラ (興味の強い順)

■将来の夢は5つくらい持っていますが、生きてる間に実現できそうにありません。


■私が使っているペンネーム(ハンドルネーム)は新しい順に

ペ ンネーム(ハンドルネーム) いつごろ 場 所
daikei、台形(本名の姓の頭文字がK、名がダイ~なので、ダイケイ) 現在(少) Yahoo Japan
d_kawakawa 現在(多) どこでも
cookiepurinman、cookiepudingman ちょっと前 Twitter
かわ、kawa 30年前 パソコン通信

※基本的には d_kawakawa とお呼びください。


■勝手に Q&A

Q: サイトがゴチャゴチャしていて何が何だか。

A: 私が作る作品には「計画性」がなく、「思い付き」で後から次から次へと追加していくような作り方をしています。

そのため、わけわからない感じになっちゃってるかもしれません。

Q: サイト内の一部の表示が、壊れているみたいです。

A: 2021年9月に旧システムから新システムへ移行しました。

そのせいで、旧システムで使っていた機能の互換性が取れていません。

順次対応していますが、時間があまりないのでなかなか直しきれません。

Q: 昔進めていたコンテンツは、途中のままで、終わっているんですか?

下図のように昔進めていたいろいろなコンテンツがありますが、

これら全部「保留」のつもりでいます。

なんか、いろいろ必要なことが別にあって、それぞれ「待ち行列」みたいに並んでいます。

たとえば、今やっている「RPGのメニュー」は、上図の「SVC」と関係があって、つまり、RPGの基本の部分にはメニューがあり、そのメニューを先にクリアしないと「SVC」を作る意味がない気がするんです。

DRAM については1つ難問があって、回路自体はそんなに問題じゃない気がしますが、回路を人々に教えようとするとき、どのマイコンを使うのかが問題で、誰でも手に入り、誰でも実験でき…と考えると、どのマイコンを採用すべきか。また、実験するために安価なオシロスコープはどれだろう、なんて探し始めて、その辺で止まっています。

Q: RPG を作ろうとしているようですが、素人の域を越えられますか?(メジャーになれますか)

素人の域でゴネゴネやっている感じがしていて、果たして上に上がれるのかどうか。

そんなことを言っている私は、つまり上に上がろうとしているってことですね。

RPG のルーツを探ったり、古い RPG の面白さのエッセンスを探し出したりと、「真髄」、「要点」、を研究したり、「実体験をした人にしか出せない言葉がある」とか、INTKSBFS といった 面白い RPG のための「くしざし(頭文字を並べたもの)」も作ったりしているので、たぶん人の心に届く RPG を作る下地はあるんじゃないかと思います。

「大作を作ろうとする人は失敗する」という仮定があって、「実体験をもとに、できる範囲で、規模の小さめの RPG を作る」という方針が、素人の域を超えられるかどうかの一つのカギだと思っています。「小中高校生のため、その両親とのあいだや、友達同士をつなげるような思い出になるようなもの」という利己的ではない利他的なスタイルが絶対に必要だ、という考え方も、そのカギの一つです。

越えられませんと言っているようじゃ、越えられませんので、越えられますとはっきりと言っておきましょう。それだけの年数と研究、倫理観(開発者の気持ちはこうあるべきだ等)を重ねていますから。

でも人間の1つの幸せとして、たった一人の幼い子供さんを、私の作品で楽しませることさえできれば、それで良いんじゃないかという考え方も持っています。そういう意味では超える気がありません(越えられません)ということになるのかな。

どっちなんだよ。青く塗った部分が良いなと思います。

素人の域を越えてメジャーになったって、消費者たちから文句の応酬を食らっているのであれば(アマゾンの有名ゲームタイトルの言われようと来たら)、それは幸せなんでしょうか。


■私への連絡手段:

ごくまれにしかツイートしませんが、私の twitter アカウントはこちらです。

https://twitter.com/cookiepudingman

何かメッセージをくれれば、返事すると思います。

返事がないときはメッセージに気付いていないんだと思います。そのときはすみません。


特設ページ群:

PC-9801 臨時特設ページを開く    …特設ページ作りましたが、更新は止まっています。

「夢幻の心臓II」特設ページを開く …また3日坊主になるかも。

電子機器組立て2級 暗記ツール …国家検定の電子機器組立て2級の暗記ツール(基板上配置)です。1級でも役立つと思います。


このサイトで最も興味を引く部分: (そのつもり)

最近、私は個人的に、「RPG のコマンドメニュー部分のプログラム」を、中高生向けに、ステップバイステップ方式で教えようとしています。

ステップ同士のプログラム上の変化をマーキングして表示したり、バルーンメッセージを使って説明を付けたりと、いろいろ工夫をしていますが、はっきりいってわかりにくいんじゃないかと思っています。

Mini-NAVIGATION
RPGメニューを作る1
基本のプログラムからはじめて、サブメニューを表示するまで
Step 1~8
RPGメニューを作る2(記事としては4)
メニューの項目に、付加情報(装備中のe記号や、店の価格)を表示。
Step 9、10、11
RPGメニューを作る3(記事としては5)
メニューの項目を段組表示する
Step 12、13


日記: 日記  (日記がこのサイトのメインコンテンツです。上の記事ほど新しい記事です)

2022/5/30(月)

「電子機器組立て2級 暗記ツール」の説明に追記しました

このページの上の部分に「電子機器組立て2級 暗記ツール」というページへのリンクがあります。

そのリンク先の説明に、少し追記を行ったので、もしも利用している方がいたら読んでください。

ページの先頭に以下の1つの小題で、説明を追加しています。



2022/5/28(土)

web6047 管理者近影

念のため言っておきますが、管理者近影はこの記事内に2つあります。

毎日部屋の中にいて、プログラミングやったり、寝てたり、資格の練習してたり、それだけだとダメだなと思って、いつも「散歩に行かないと」と思っています。


それで今日は、いつもの 海岸の崖の上の公園 を散歩しました。

「海岸の崖の上の公園」とは下図のような場所です。


▼そこから海を撮影。いつもの景色。

▼公園は一部、小さな丘があって、写真はそこから撮影しました。丘の上には正方形の大きなベンチ(テーブルみたいな)があります。

▼「プログラマーにとってはこれが必要だ」と言いながら、正方形のベンチにねっころがり、日光浴をしました。こんなふうに。


▼「これが必要なんだ…」と。  …そして、カメラを反対側に向けて…


▼ついでに、私の顔も撮影。「私のWeb ページ訪問者にはこれ(管理人の素顔)が必要なんだ…」と。  ひつようねぇって?


▼丘から降りてもう1枚撮影。


▼あの雲、何に見えますか? 創作する人にとって必要なことは、「想像力」です。左側が割れているのが特徴的だけど、何に見えるかは難しいですね。

わかった!! にゃんこを上から見たところ! だな!


▼このように図形を置き、(Microsoft Excel を使用 ※1)


▼図形を、加工して、、こんな感じか。クロネコにゃんこ。と黄色いのは猫用のよくあるおもちゃ。


▼にゃんこを上から見たところ、でしょ。


▼でも、写真から猫図形を取り出してこちら側に回転してみたら意外とゆがんでいたので(下図左)、調整してみました(下図右)

やっぱり上図右の足の感じは、実際の猫の生活の様子を知っていないと描けないな、と思います。この絵が上手かどうかは別として。

なので、知りもしない RPG のシナリオの「ドラマ」を描くのって、基本的には無理なんじゃないかと思います。


▼で、今回の記事の題名にもなっている「管理者近影」。将来もっと身体の調子が悪くなって状態が悪くなると、もっと悪くなるだろうな。

※部屋が汚いですが、この写真は「クリッカブルマップ」になっていて、調べたいところをクリックすると、説明(いいわけ)が出てきます。点線部分以外も一部クリックできます。(スマートホンはタッチ)

私の生活の9割以上は上の写真のような私ではなく、ほとんど人に見せられないような姿で生活しています。


あと、いつも言っていますが、私が「ベンチの上でねっころがっていた」と言った時の図の「私」の図。

構図として妙にリアルな感じがしますが、バラすと Excel の図形の集まりなんです。一部、手のひらと髪の毛だけいじっていますが、それ以外は Excel のプリセットの基本図形です。


やっぱり、絵っていうのは、基本的に単純な図形の集まりですね。

絵が描けない人は、まずは単純な図形の集まりの状態で、どこまで表現できるかがひとつのステップになっていると思うんです

それを飛び越して、服のしわとか、身体のパーツが組み合わさっている部分の複雑な肉の様子とか描いてしまうと、苦しくなるんじゃないでしょうか。もちろん服のしわや肉の形を興味を持って練習するのは良いことなんですけどね。

難しいですね。


2022/5/27(金)

自分探し

「自分探しってどうやるのか」っていう話題が某所であって、

私にとって「これが私だ」と言えるものを探したら、、

この本の山と、上に乗っている犬(本当は猫があれば猫が良い)が「自分」と言えるものです。

パソコン関係のいろいろな本と、犬猫など世話をする私のことを慕ってくれる動物たち。それが私(自分)なんじゃないかなぁ。子供を持っている人は「子供が自分」って思うかもしれない。血がつながっている子も、養子も、ペットも、親子関係は愛せば愛すほど「自分だ」って言うかもしれません。

そういう状態が「自分を見つけている」と言うんじゃないかな。

それか、

本来するべき仕事に就いた時、「自分を見つけた感じがする!」と思うかもしれません。

私だったら、ゲーム会社で、ある1つのゲームを作るためにまい進するような将来があったら、そのときそう思うかもしれません。

「私にはそれしかないから」と言って「スイートなお菓子や、おいしい食べ物を食べること」しか取り柄がないと言っている人は、それが「自分」なんでしょうね。

手にモノづくりをする道具を持っている人、手にお菓子を持っている人、手に生ビール中ジョッキ(390円)を持っている人。

自分探し…、若い人ほど問題になりがちだなと思います。


2022/5/22(日)

Electron (エレクトロン)

エレクトーン(電子ピアノ)じゃないですよ。

インターネットの JavaScript や CSS の機能を、Windows などの OS 上で、インターネットブラウザなしで使えるようにする仕組み「Electron」。

いつも私が作っている JavaScript のプログラムを Electron で動かしてみました。

実行を試す:

ただし、Electron の MacOS 版のみ、Electron を作成するときに、コマンドプロンプトで管理者権限が(なぜか)必要で、なおかつ、

EPERM: operation not permitted, stat 'C:\Users\<ユーザー名>\AppData\Local\Temp\electron-packager\darwin-x64\test-darwin-x64\test.app\Contents\Frameworks\Squirrel.framework\Versions\Current'

というエラーを出しつつの実行ファイル出力だったので、大丈夫なのかどうか…。

ダウンロード容量に注目すると、他と比べて 1/20 のサイズでしかないし…。

ダウンロードしたら次のように実行してください。

  1. ダウンロードした zip ファイル を展開する。
  2. 展開してできたフォルダの中で、
    Windows なら、test-win32-x64 フォルダや、test-win32-ia32 フォルダを開きます。
    MacOS も Linux も、ZIP を解凍した、それぞれのフォルダを開きます。
  3. すると、
    • Windows の場合は、32bit版も、64bit版も、大量のファイルがありますが、その中の test.exe を実行します。
      すると、たぶん「発行元を確認できませんでした...」と表示されます。私を「悪人ではない」と信じるなら、なおかつ、送信されるデータが改ざんされていないだろうと思うなら、 実行 ボタンを押してください。
      しばらく待つと、「インターネットブラウザの場合」とまったく同じ画面が出ると思います。
    • MacOS の場合は、test.app というフォルダがあります。これを?どうするんでしたっけ…。わかりませんけど、アプリケーションフォルダに入れるなどするんでしょうか。
      でも、MacOS のみ Electron の作成がうまくいかなかったっぽいので、動かないかもしれません。
    • Linux の場合は、うーん、知らんわ。自分でディレクトリを作ってコピーをするとかなのかな?


Electron はインターネットブラウザなしで、OS 上で WEB 技術を実行させることが出来る、というものです。

その様子を今回の test のアプリで見てもらえればと思います。


なお、表示された Electron のウィンドウをリサイズすると、リサイズに合わせて、「センタリングされたり」、「拡大されたり」しますが、それは Electron の機能ではなく、私が作成した JavaScript による機能です。


実は Electron をやりたくて Electron を始めたのではなく、もともとは「Yahoo! 知恵袋」で

「TypeScriptってまじで最強だと思うんですが違うんですか?」

というマジ質問があって、それに私がマジ回答したのが始まりでした。(その知恵袋のページ


回答するために、TypeScript の開発環境を作ろうとしました。

TypeScript の前に node.js が必要とのことで node.js をインストール。

そして、node.js のインストールフォルダにある npm(パッケージマネージャー)というコマンドを使って TypeScript をインストール。

ところで、npm とかその似たコマンドである yarn を使って、いろいろインストールできるわけなんですが、普通の Windows のソフトのインストールとは全然違う感じのソフトウェアインストールで、インストールしたものは一体どこにあるんだろう?と思って調べたら、

場所は、C:\Users\<ユーザー名>\AppData\Roaming\npm でした。

そのフォルダの中は、以下のような感じで、それぞれのファイルは「npm install -g ~」というインストールコマンドでインストールしたものでした。

node-gyp
node-gyp.cmd
node-gyp.ps1
node_modules
tsc
tsc.cmd
tsc.ps1
tsserver
tsserver.cmd
tsserver.ps1
yarn
yarn.cmd
yarn.ps1
yarnpkg
yarnpkg.cmd
yarnpkg.ps1

TypeScript の入門サイトを見ながら(入門者なのに回答しちゃっていいんですか?)、TypeScript でサンプルのプログラムを作り、TypeScript の tsc というコマンドを実行すると、「コンパイル」という形で、その生成物として JavaScript ファイルが作成されました。

「tsc」とは、TypeScript Compiler の頭文字なんでしょうね。

生成された JavaScript ファイルは、node コマンドで Windows 上で実行することもできるし、ブラウザでいつものように読み込ませることもできました。なるほど。

TypeScriptってまじで最強?

TypeScript は JavaScript の上位互換で、TypeScript の中で JavaScript をそのまま書けるのでこれまでの JavaScript のライブラリがそのまま使えるそうです。そして、JavaScript にはない変数の型指定ができます。

だから最強?

でも、

そのあたりで、広まるには時間がかかるんじゃないかなぁと思いました。

なので、機能としては最強かもしれないけど、現実問題として、最強の座をほしいままにできるのかどうかは別になりそうです。


で、知恵袋の話はそれで終わりで、node.js を使って Windows 上で JavaScript が実行できるのなら、「CANVAS を表示させたい!」と、個人的に思いました。

ちょっと調べて、node-canvas を試しましたが、どうも、画面は表示されず、暗黙的に画像を編集することしかできないものみたいでした。


うーーーん、と思って、そういえば、ちょっと前に、HTML の内容をデスクトップアプリケーションに変換する何かがあったはず…

と思って、そーだ!「Electron」だ!と思い、それで今回 Electron を使い始めた、というわけです。


Electron を導入していて、「わくわくするような、とても楽しい感じ」がしたんですが、

ブラウザ上で作ったものを、わざわざ別の形にして提供するのは、同じことの繰り返しなんじゃないかという気がしました。

前例で言うと、WEB サービスでやりたいことは全部できているのに、わざわざ同じ内容のサービスを スマートホンのアプリの形で提供する、、というものがいくつかあると思います。Yahooアプリとか。

Electron もそれと同じにならないかなとちょっと思いました。

この記事の冒頭で提供した test アプリのブラウザ版と Electron アプリ版を見て、ほとんど同じ内容だったと思います。


でも考えてみれば、ゲームソフトを Electron で提供する場合、

などなど、その辺で利点があるのかもしれません。



Mozilla Firefox について


インターネットブラウザの Firefox を使っていて、処理が重たいなと思ったら、私は CTRL + ALT + Y を押して、Firefox を再起動します。

このショートカットキーは、私が独自に作成したもので、みなさんのパソコンで同じキーを押しても再起動は起こりません。

以下の黒い部分に示したような内容で、.bat 形式のテキストファイルを作り、さらにそのショートカットファイルを作り、そのショートカットファイルのプロパティのショートカットキー: という項目で上記キーの組み合わせを押し、OK ボタンを押してプロパティ画面を閉じます。そのショートカットファイルをデスクトップに置くと、いつでもどこでもそのショートカットキーを押せば、.bat 形式のテキストファイルに書いた内容を実行してくれます。(いつでもどこでも、なので、ショートカットキーはどのアプリケーションも使わないような複雑な組み合わせにします)

なお、下記の %firefox% の部分は、firefox.exe のパスが入ります。たとえば、C:\Program Files\Mozilla Firefox\firefox.exe などです。

@echo off
taskkill /im firefox.exe /F
timeout /t 10
explorer /e,"%firefox%"


そして、本題ですが、ショートカットキーを押して Firefox を強制終了する前の状態が、下図の画面左のグラフの左半分のディスク100%状態になっている部分です。ショートカットキーを押した瞬間にグラフの右半分の状態になりました。明らかに Firefox がパソコン全体の処理を重たくしていた張本人なのがわかります。

Firefox バージョンは 2022年5月22日 時点最新の Windows用 ver. 100.0.2 64bit版 です。

私が使っているパソコンは、2011年発売の acer 3830t(リンクは 価格.com へ)という機種で、

core i5 (2.3GHz)、メモリは 4GB から増やして 6GB、ディスクは SSD ではなくハードディスク

なので、パソコンの処理速度が遅いことが原因で上記のようになっている、とも言えそうですが、どうなんでしょうか。

私以外にも同じような症状で困っている人っているんじゃないかなぁ…


最近 Firefox はいろいろな企業から「サポート対象外通告」を受けているし、私個人としては「もうダメなんじゃないかな」とたびたび思います。

でもそれでも Firefox を使い続けるのは、

の2点かな。

それで、これからの Firefox に求めることは、

の2点。

あとできれば、Firefox ではなく、Netscape Navigator という名前に戻してほしいな。


昔飼っていた猫の回顧録です。

お弁当屋さんのお姉さん

私がお弁当屋さんの前を通ったら、まだ子猫の状態の上の2匹がいました。

可愛いと思ってかまっていると、お弁当屋さんのお姉さんがお店から出てきて、

「飼えませんか?」

と聞かれました。

飼えないんですけど、私が持っているパソコン関係の一式を売りさえすれば、、って考えたんだっけなぁ、、

それで段ボールに子猫2匹を入れて家に持ち帰りました。

私が台所の流しでジャーっと水を流して皿洗いを始めると、連れてきた子猫たちが「わーい」という様子で私の足元に寄ってきました。

でもそれが、楽しく優しいお弁当屋さんのお姉さんではなく無骨な男の私だったので、それに気づくと「あっ、ちがう…」という様子で しょぼんと後ろを向いて去っていきました。

たぶん、お弁当屋さんでもお姉さんが流しでジャーっとやっているのをいつも聞いていたんでしょうね。

鈴の音

写真の通り、外で放し飼いにしていたんですが、彼らが外へ遊びに行っていて、どこにいるかわからないとき、私が鈴の音を「リンリーン、リンリーン」と鳴らしながら近所を歩くと、物陰からヒョコっと顔を出し、2匹とも私のところへ寄ってきます。

そしてそのまま家に帰り、「ごはん」の時間となります。

グルメ

猫のご飯と言えば、カリカリのキャットフードか、レトルト生タイプのパックのどちらかだと思います。

あるとき、刺身とか焼き魚をほぐしたものを与えたらだいぶ喜んで食べました。

その次のご飯の時間になると、「ごはんだわーい」と猫たちは猫のお皿に向かうんですが、お皿に何が乗っているかを知ると(キャットフードが乗っている)、動作が遅くなり残念そうにノロノロとお皿から離れて、

「あのう、これ、食えないんですけど?」

という感じになりました。

人間も同じですね。毎日甘いお菓子を食べていると、いきなりせんべいを渡されても「なにがうまいのか」と思ってしまいますよね。

なお、猫にお刺身を食べさせるときは、そのままの切り身を出してしまうと、噛み切れず、飲み込むしかないので、「まぐろのたたき」のようにミンチ状にしてから出してあげると喜ぶんじゃないかと思います。

また、焼き魚をその姿のまま出してしまうと、「野生の本能が目覚める」という現象が発生するのではと個人的に思っています。一度野生が目覚めると直せないので、試しでも何でも焼き魚の姿出しはやらないでください。なので、ほぐして出すようにします。

さらに5匹の猫

近所の大きめの公園のトイレ付近を歩いていると、箱に入った5匹の子猫がいました。

子猫以前の、おなかから出た直後みたいな毛も生えていない子猫でした。

これは、と思って、なんでか、私は(2匹すでにいる)家に持ち帰り、5匹とも元気がないので動物病院に連れて行きました。

そこで動物のお医者さんが、少しあきれた様子で、

「(私の名前)さん、しかたないですよ。無理ですよ(一人の人間が可愛そうだからと言って次々と猫を拾うものじゃないし、将来どうなるか想像できない)

それで、元気がないことについては、注入器を使って口の中に「ブドウ糖」を入れてやれば…とお医者さんがそうすると、途端に5匹の猫たちは立ち上がり、「ギャーギャー」と言って何かを求めて動き始めました。まるでラジコンの車に乾電池を入れたかのように。

その後、どうしようもなくて、5匹とも死んでしまい、庭に埋めてあげました。

今思えば、やはり、猫屋敷になる瀬戸際でもあったと思います。

「可愛そうだから」というのは、間違いなく「1回か2回まで」といった「限度」があります。

この件の一番の解決は、「最初の飼い主が親猫の避妊手術を行って、5匹の子猫の誕生を予防するべきだった」、ということだと思います。

その辺は多くの人々の間で周知されていなくて、生まれた '面倒な' 子猫をビニール袋に入れてゴミ捨て場に捨てる人もいます。無責任もそうですがそれ以前に多くの人は「無知」なんです。学校で教えているわけでもなく、親が子に教える義務の中にも入っていないので、知らないのは仕方のないことでもあります。

猫の飼育の本をしっかり読んだ私も、避妊や去勢をするときには、「自然のものに対して、かわいそうだ」と確かに思ったので、それをやらない人がいるのも無理もないと思います。でも、「かわいそう」よりも、「猫屋敷の回避」のほうが優先順位が上みたいです。

まぁ、以上は私のちょっと恥ずかしい話かな。

猫との会話は成立する

(前にもこのWeb ページ上で同じ話はしました)

私が寝床で寝ていると、猫(ミケ)が横に来て「ニャーーン」と一言鳴きました。

私は「わかったよ」と言って起きて、窓を開けてあげました。

すると猫は外へ遊びに行きました。

そのあと、私は寝床で呆然としてしまいました。

なぜなら、「ニャーーン」と鳴いた時の猫の顔が、人間の子供が大人に何かお願い事をするときの顔と同じだったからです。

意思の疎通は、怒ると遮断されます。それは人間も同じです。

あんまりきつい怒り方をする人と話をするときは、話の内容が しどろもどろ になって、なかなか言いたいことを伝えられないものです。

友達にならサラっとあっさりと伝えられるのに。

その人の怒りを恐れて、自由な意思の表現が出来なくなっているからです。

私は猫たちには たとえば食卓の上に乗ったとしても怒らなかった(少し時間をおいてから優しく降ろしました)ので、意思の疎通がしっかり開通していて、それで猫は意思を私に伝えることが出来たんだと思います。

一度でも怒ってしまえば、それは記憶に残ってしまい、なかなか直せなくなります。

それはきっと動物も人間も同じなんでしょうね。

死んじゃっても悲しくない

(前にもこのWeb ページ上で同じ話はしました)

2匹とも1年か2年で死んじゃいましたが、1年目は灰色のほうが死んじゃいました。

怪我をした鳥がいて、私がかくまっていたんですが、それを灰色にゃんこがもてあそぼうとしたので、つい大きな声で「ダメっ」と怒ってしまいました。

それが原因だと私は信じていて、きっと灰色にゃんこは怒られたことにムシャクシャして、庭の植物の肥料を猫の餌みたいに食べて、それで死んでしまったんじゃないかと思います。

家の外の裏手の暗いところで鼻から血を流して死んでいましたが、そのときは私は玄関に連れて帰り、結構泣きました。

その様子をミケは横で一緒に見ていました。何が起こったのかはわからなかったようです。

2年目はミケが死んでしまいました。

外には近所の白いボスネコがいてそれが結構怖くて、しかも友達の灰色にゃんこもいないので、心細くて、私に何度も「ニャーン」と訴えてくるんです。私はどうすることもできないので「いつまで泣いているの!」と怒ってしまったんです。これもそれがにゃんこが死んだ原因だと私は信じています。今まで一度も怒らなかった私が怒ったんですから。灰色にゃんこにも一度も怒ってこなかった。

家の庭で死んでいて、やはり家に連れて帰りましたが、私は少しも悲しくなかったです。

いつものようにスクーターバイクに乗って、電気屋のゲームソフトのテストプレイコーナーで、カプコンのゲームで遊んだりして、

「大事な猫が死んだというのに、悲しくないのか、なんで遊べるんだ?」

と、平然としている自分は頭がおかしいのかと不思議に思いました。

ペット霊園へ連れていき、これから火葬しようというときに、ミケの身体をなでたら、それが可愛くって、

まだ可愛がれるから、焼かないでほしい、と誰にともなく頼みました。

私は昭和の男なので、そう簡単に人前で泣きはしませんが、泣くのを気合を入れて我慢したら、その後猛烈に身体の具合が悪くなりました。

泣くという身体の自然な生理現象を無理やり止めるのは、なるべくやめたほうが良いみたいです。

でも、あとで身体の具合が悪くなってもいいから泣くところを人に見せたくはない、というのならそれも良いと思いますが。

わかりませんが、私は猫の身体をなでることで、深い愛情を感じていたのかもしれません。

人間とのかかわりが少ない私は、猫たちによって、愛を教えてもらったのは確かです。


以上、昔飼っていた猫たちとの生活の回顧録 でした。思い付いて書くことにしました。

ほかに、電子機器組立ての資格の練習や勉強をしなきゃならないのに。取り組む気あるのかな?

身体の具合が悪くて、休職して、国から傷病手当をもらって、生活費が足りているのか足りていないのかわからないような生活をしているんですけど、一体何をやっているんだか、と思います。


2022/5/11(水)

日陰で撮影したせいか、見栄えがしませんが、毎年毎年、花盛り。

子供はアニメやゲームのことばかり考えていて、花の美しさに興味はまるでない。

大人は花の美しさを知っている。魅力に引き付けられるところがある。

いつその魅力を知ったんだろうなぁ…。


2022/5/9(月)

お話3点

おは梨1点

母の日に贈り物を送ったら、母は喜んでいました。

どうして母の日に贈り物をするのかと言うと、

年を取るとそういうのが必要なんじゃないかと思うんです。

なんらかの人間関係で傷つくと、若いころよりも傷が深くなるだろうし、

老化で寿命が近づくと、心細くもなる。

子供が数人いるのに、みんなどこかへ行ってしまい、あんまり目を掛けてくれないとそれもまた寂しいかも。

まぁ、そんなところです。

おは2点

なんだっけ、コロナウイルスの三回目接種をこの前、5/6に接種してきました。

3回ともモデルナ製で、翌日と翌々日は案の定、ダウンしていました。

わかっていたので寝床に、ロキソニン、ひえぴた、水分、リポビタンD、おかし、パンなどなど

完全装備にしていました。使ったのは、水分、リポビタンD、おかし、パン、でした。

私はロキソニンとひえぴたを使うほどではありませんでした。

今は回復しています。

那覇市3点

え?どれも題名が「お話」になってないって? まったく、お話になりませんな?

あと、またプログラムを作っていました。

これ

以前から何度も公開している、「モザイク」効果を試すプログラムです。

「CANVAS 要素の属性」と、「CANVAS 要素の STYLE」、「CANVAS コンテキスト」の、これら3つの、ある画面設定をうまく調整すると、おなじ描画なのにモザイクにすることが出来ます。

その辺をあいまいにして話を進めてもつまらないと思うので、詳しく書いておきます。

JavaScript によるモザイク処理のやり方:

説明の前に:

  • HTML と CSS の仕様として、CANVAS のサイズには、CANVAS タグの「属性のサイズ」と、CANVAS タグの「スタイルのサイズ」の2種類があります。たとえば、
     <CANVAS width="256" height="224" style="width:512px; height:448px;"></CANVAS>

    といった具合です。 
    属性のサイズ(緑部分)は、CANVAS 画面の「ピクセルの数」を表し、スタイルのサイズ(オレンジ色部分)は CANVAS 画面の「見た目の寸法」を表します。
    いわば、属性のサイズは、パソコンモニタの解像度のようなもので、スタイルのサイズはパソコンモニタの何インチとかの大きさのようなものだと言えば、混乱がなくなるでしょう。

    今回の説明の中では、この属性のほうを、

     cc.canvas.width, cc.canvas.height
    のように緑色で色分けし、スタイルのほうを、

     cc.canvas.style.width, cc.canvas.style.height
    のようにオレンジ色で色分けします。
    (なお、cc.canvas は CANVAS 要素です。CANVAS コンテキストが便利に CANVAS 要素をそのようにセットしてくれています)
  • また、プログラムや説明の中で出てくる「 cc 」は「CANVAS コンテキスト」です。
    よく変数名で ctx とか書かれますが、私は cc のほうが楽なので…


それではモザイク処理のやり方です。

変更前のプログラムについて:

最初の JavaScirpt プログラムが これ だとします。

画面に大きな○が描かれています。

このプログラムに変更を加えて、モザイクにしていきます。

そのプログラム内で変更を加える予定の箇所には

//1
//2
//3

のようなコメントが入っています。

この数値は以降の手順番号と対応しています。

プログラムリストを表示


変更後のプログラムについて:

変更後のプログラムは これこれ です。

4ドットの軽いモザイクがかかっています。

プログラムリストを表示


なお、変更後のプログラムをダウンロード(右クリック→名前を付けて保存など)する、または、これこれのリンク先を表示後、右クリックしてページのソースを表示等して、横に置きながら次の手順を読んでいただくと良いかなと思います。

▼たとえば、こんな感じでウィンドウを並べて


モザイク手順:

  1. まず、CANVAS の属性のほうのサイズである cc.canvas.widthcc.canvas.height はモザイク機能のために 以後、使えなくなる ので、cc.canvasWidth と cc.canvasHeight に値のコピーを取っておきます。
    以後は cc.canvasWidth と cc.canvasHeight を使用して canvas のサイズを参照するようにします。
    canvas コンテキスト内に勝手に新しい変数を追加するのは、少々ルール違反なので覚えておいてください。
    //1
    cc.canvasWidth = cc.canvas.width;
    cc.canvasHeight = cc.canvas.height;
    ※この手順だけで心が離れる方もいるとは思いますが。
  2. つぎに、canvas の style のほうのサイズを次のように設定します。
    これにより、属性のほうのサイズ canvas.width, canvas.height が今後どのような値になろうとも、初期の見た目のサイズを維持してくれます。(ブラウザはサイズの決定としては style のほうを優先するみたいなので)
    //2
    cc.canvas.style.width = cc.canvasWidth + "px";
    cc.canvas.style.height = cc.canvasHeight + "px";
  3. 仮に、モザイクのサイズを「4ピクセル」にしようという場合、
    「もともとのサイズ cc.canvasWidth, cc.canvasHeight  を、モザイクのサイズで割った値」を、属性のほうのサイズ cc.canvas.width, cc.canvas.height に代入します。
    //3
    mosaic = 4;
    cc.canvas.width = cc.canvasWidth / mosaic;
    cc.canvas.height = cc.canvasHeight / mosaic;
    4で割るということは、CANVAS の属性のサイズ(ピクセルの数)が 1/4 になるということです。
    でも見た目のサイズは style のほうで もとの見た目の大きさを維持してくれます。
    つまり、「見た目の大きさは同じで、ピクセルの数だけが減る」、という結果になります。
  4. 以上でもモザイクっぽくなりますが、画面内のピクセル数は減っており、今までの描画はそのピクセルに合わせて描画されるので、拡大されて描画されてしまいます。(虫眼鏡で左上の一部(1/4)だけを見ている描画となる)

    ※この図の右側の円(の一部)は本当はピクセルに合わせてゴツゴツしています)

    そこで、cc.scale() メソッドを使用して、1ピクセル(1単位)について、

    「既定では、キャンバス上の 1 単位は正確に 1 ピクセルです。」(MdN scale()より)

    となっているところを、その1単位を 1/ 4 ピクセルへ細分化します。
    //4
    cc.scale( 1 / mosaic, 1 / mosaic );

    これは物理的な1ピクセルを4で割って(縦横4で割って)、論理的に4×4ピクセルとして動作させるということです。
    言い換えれば、「座標としては4分割された」、ということです。(ちょっと説明が不適切かな…最後のほうで別の切り口で再度説明します)



    1つ前の手順でピクセルは大きく4倍に引き伸ばされました。そしてこの手順では、座標として4分割されます。
    その結果、「ピクセルは荒いけど座標の細かさは同じ」という状態になります。
    だから同じ描画内容を、粗いピクセルで(モザイクで)描くことになります。



    まぁ、なんというか、見た目は style で固定して、画面のドットの量は CANVAS の属性で減らし、その結果ドットの粗い画面になるけど、座標軸が変わるので、scale() を使って直した。というわけです。
  5. それから、もし、もともとの描画内容で、CANVAS の属性の canvas.width, canvas.height を参照していた場合、cavasWidth, canvasHeight を使うよう、変更します。
    canvas.width, canvas.height はモザイクのために小さな値になっており、そのまま使うと「画面全体を消去したいのに、画面の左上一部しか消去されない」という結果になってしまいますので。
    //5
    cc.beginPath();
    cc.arc( cc.canvasWidth / 2, cc.canvasHeight / 2, cc.canvasHeight / 2, 0, 6.29 );
    cc.closePath();
    cc.stroke();
  6. そして最後に、このままだと、画面が(ハードウェア・アクセラレーションにより?)ドット補間されて、にじんでみえるので、ドットのままギザギザに表示するように設定します。
    //6
    cc.canvas.style.imageRendering = "crisp-edges";

以上の変更をほどこしたものが

これこれ (※上記冒頭のこれこれと同じ)

です。4ドットのモザイクになっています。

この4ドットという数値を動的に変更できるようにしたバージョンは

これ

です。


なお、cc.scale() について理解が難しいので、別の切り口で再度説明します。

まず初期状態。
図の説明:
・赤い枠が style によるサイズ指定(画面の大きさ)。
・裏にある青いマス目は座標系。
・青い座標系上の赤い点線の円は描こうとする図
・緑の線は画面のピクセルと座標系のピクセルとの対応を示している。

初期状態ではピクセルと座標は1対1で対応しており、描こうとする図はそのまま画面に描かれる。
手順3を行った状態。
mosaic = 4;
cc.canvas.width = cc.canvasWidth / mosaic;
cc.canvas.height = cc.canvasHeight / mosaic;
CANVAS の属性のサイズを、最初のサイズの1/4にした。

その結果、
属性のサイズ(ピクセルの数)が減ったので
描こうとする図は左上の1/4のみになる。
一方、style のサイズ(画面の大きさ)は変わらないので、ピクセルが引き伸ばされて表示される。
手順4を行った状態。
cc.scale( 1 / mosaic, 1 / mosaic );を行った。

その結果、
MdN の言葉を借りると「キャンバス上の1単位は1/4ピクセル」になった。
まぁ、わかりやすくガンダムでたとえると、「実物大ガンダムに比べて1/144スケールでプラモデルを作り、手のひらに収まった」というのと同じように、「手順3に比べて1/4スケールで描画し、画面内に収まった」と言えます。


座標上の細かさは、画面上のピクセルと必ずしも一致しない、cc.scale() で操作される、ということに注意してください。

上表の右端の図で、青い座標系に、アニメキャラなどの画像が置かれた場合、座標上の4×4ピクセルに対応する画像の4×4の画素は、その各色がブレンドされて1色になり、画面上の大きな1ピクセルにその色で描かれるということになります。(モザイク)

以上、モザイク処理の詳細でした。

何の話だっけ?

「モザイク」効果を試すプログラムの紹介をしているところでした。しかもお話3点の3つ目。

今回はモザイクをしたいアプリケーションと、モザイクを行うプログラムを完全に分離して、アプリケーションから見てモザイクのプログラムは完全に外部の装置のような物、というコンセプトでプログラムしました。(そのつもりです)

これはたとえば、ゲーム機をテレビAにつなぐとぼやける。テレビBにつなげるとくっきり。というような、ゲーム機自体に変更はないけど、つなぐ画面によって表示が変わるといった感じです。テレビとゲーム機に ゲームの内容を変更するような関係 はありません。(依存関係がない)(今回はそうしたつもりだけどあまり自信がありません)

そうすると何が得なのかと言うと、モザイクの機能を別のプログラムで再利用しやすい、というのと、メインプログラムの中にモザイクのプログラムがなくなるので、メインのプログラムの見通しが良くなる(とってつけたようなコブみたいな部分がなくなり、すっきりとする)、という良さがあるのかな?


また別の話ですが、ウィンドウをリサイズすると、画面を拡大縮小しますが、その拡大縮小を「整数倍限定」にしています。

整数倍限定にすると、CSS で image-rendering : crisp-edges にしたときにフォントが汚くなるのを防ぐことが出来ます。

▼左:自由な拡大(ドットの拡大率がドット毎に均一ではない)、右:整数倍の拡大(すべてのドットが均一に拡大)※B

▼なお、CSS の image-rendering : crisp-edges を削除すると、両方とも同じ感じになります。でもぼやけてしまう。ジレンマじゃのう。

▼でも「画面の拡大」や、「crisp-edges」をあきらめれば、CANVAS はもともとはこのような綺麗な描画を行ってくれます。

このように、「crisp-edges」を使って「レトロゲームのようなドットの粗さを楽しみたい場合」は、上図※Bの「整数倍の拡大」がベストです。


余談:

(私は説明が長いし、余談もまた長い!)

CSS の object-fit が結構便利なので、今回は object-fit を導入しようとして期待していたんですが、結果は

これ

でした。画面サイズがグラグラと変化します。


原因を考えました。

もともとの CANVAS のサイズが、512 * 448 で、縦横比が 512 / 448 =1.142 になります。

モザイク処理では、CANVAS のサイズをいじります。モザイクの大きさがたとえば 3 ピクセルだとすると、

横512 / 3 = 170.666 (※ちなみにこの小さくなった画面を CSS のほうで引き伸ばすからモザイクになります。それだけではありませんが。)

縦448 / 3 = 149.333

この時点では、縦横比は、170.666 / 149.333 = 1.142 で同じになります。

ところが、この計算結果を、

cc.canvas.width = 170.666;

cc.canvas.height = 149.333;

のように代入すると、代入するときに JavaScript のシステムのほうで小数点以下が切り捨てられてしまいます。

すると、縦横比は 170 / 149 = 1.140 となり、もとのサイズの縦横比と異なる結果となります。

これが原因で、上記の「これ」リンクで示したサンプルのとおり、グラグラと微妙に動くことになります。


これを何とかしようとして、方程式を立ててみたり、Excel で計算してみたりと、いろいろやったんですが、ダメでした。

小数点以下を切り捨てられてしまうと、数学的には(私の数学の力では)、どうやっても元の縦横比へと修正がききません。

▼モザイクサイズを微妙に(3を2.9にするとか)
増減すればと方程式をたててみて、
▼その解の公式を堂々作りました。しかし、
モザイクサイズに増減値 x を足しても結果は「必ず1」でした

(写真の方程式は縦横比を h / w = 0.875 にしていますが、途中で w / h = 1.142 に変えました)


▼Excel で計算。モザイク大きさを1~変えていくと、CANVASの属性(width, height)へ代入時の小数点切り捨てにより縦横比が変わるところがある(赤塗り)。
また、右端の方程式は役に立たず…

方程式で算出した増減値によりモザイクサイズが必ず1になるなら、たしかに縦横比は維持される結果になるけど、それだと意味ないでしょ。。

方程式がそういう結果を出してくるとは思わなかった orz


で、あきらめて、object-fit という CSS の便利な機能は使わないで、自前でオブジェクトをフィットさせることを考えました。


CSS の object-fit は対象が CANVAS 要素である場合に限り、CANVAS の属性のサイズの拡大縮小を目的とした動的な変更で(そのとき代入時に小数点を切り捨てることが原因で)、縦横比がグラグラと変わる、という問題を持っています。

そこで、object-fit を使わず、

canvas.style.width = "512px";

canvas.style.height = "448px";

としてしまえば、サイズは固定され、グラグラ動きません。

(このあたりはもはや、モザイクの処理であれこれ考えた私の個人的な考察の世界なので、みなさんはついてこれないかもしれませんが…)

そのうえで、モザイク処理として

cc.canvas.width = 170.666;

cc.canvas.height = 149.333;

とやると、前述したように小数点以下が切り捨てられ、縦横比は違うものになるんですが、見た目のサイズとして優先されるのは style のほうのサイズなので、style のサイズに合うように、canvas サイズはピタっと一致してくれます。そのサンプルが、

これ

画面サイズは動きませんが、多分1ピクセルが正方形ではなく縦横に少しゆがんで、それで全体が一致しているんだと思います。


そして、ウィンドウのサイズに合わせて、画面を拡大する方法は、2種類ありまして、

1つは style のサイズを変更する方法。そのサンプルが、

これ

ウィンドウリサイズすると、それに合わせて大きさが変わります。


もうひとつは、CSS の transform : scale() を使用して、要素を拡大します。そのサンプルが、

これ

どちらもまったく同じ動きをしますが、CSS の transform : scale() を変える方法は、canvas の style の margin とかを無視して強制的に拡大するので、扱いにくいかもしれません。(たぶん scale される前のサイズを内部で維持していて、そのサイズを基準に margin などが計算されていると思われる)

また、ウィンドウを最小に近づけると変な動きになったりもするので、CSS の transform : scale() を使用するのはいまいちかも。


最後に、拡大を整数倍限定にするにはどうするかと言うと、プログラム内で CANVAS とその親要素のサイズを比べて算出した拡大率 mul の小数点を切り捨てます。

mul = Math.floor( mul );

これ




2022/5/3(火)

今月の扉絵プログラム

毎月、ページの最初にスクリプトや絵を掲載するつもりでいますが、最近は毎月載せることが出来なくなっています。

今月は久しぶりに JavaScript の掲載です。

JavaScript + CANVAS + bezierCurveTo() + 3DCG計算、による「バネ」です。


そのプログラムリストを下記に掲載します。

「装飾工夫版」は、ページに掲載するためにいろいろ工夫をしたバージョンです。

「工夫なし版」は、その工夫をする前の試作段階のバージョンです。

実行

プログラム内で「びよんせ」がどうのと言った記述が散見されますが、その機能はオフにしてあり、オンにしても動作しません。

「奥であるほど色を少し薄くする」ということを実現するために、スプリングを分割しています(Springクラスのdraw()メソッド内にて)。

工夫なし版では分割していません。

「動きさえすればいい」という気持ちでプログラムしているので、読みづらいと思います。

class App {

constructor( canvas ) {

this.cc = canvas.getContext( "2d" );


//---ここからカスタマイズ

this.cc.canvas.width = 800; //CANVAS解像度

this.cc.canvas.height = 400;

//ドットを強調

if( 1 ) this.cc.canvas.style.imageRendering = "crisp-edges";


//文字列配列は自由に増減して良い

this.sts = [ "びよーん", "びよよよーん", "びよーん", "", "びよんせ" ];

this.stFont = "italic bold 48px ''";


this.s = 100; //焦点距離、レンズサイズ

this.zm = 10; //画面拡大率(3D計算結果に対して)


//--ここまでカスタマイズ


this.springs = new Array();

this.springs.push( new Spring( this, {

r : 255,

rRating : 0,

iKaitenZY : 1,

kaitenZYEn : 1,

kaitenZYPlus : -.02,

ringZoom : 3,

makisu : 10,

posX : -250,

} ) );

this.springs.push( new Spring( this, {

g : 255,

gRating : false,

iKaitenZY : 1,

kaitenZYEn : 1,

kaitenZYPlus : -.02,

ringZoom : 3,

makisu : 10,

posZ : 1500,

} ) );

this.springs.push( new Spring( this, {

b : 255,

bRating : false,

iKaitenZY : 1,

kaitenZYEn : 1,

kaitenZYPlus : -.02,

ringZoom : 3,

makisu : 10,

posX : 250,

} ) );


this.beforeTime = 0;


}

start() {

this.frame( 0 );

}

stop() {

//check.

if( ! this.timerId ) return;

cancelAnimationFrame( this.timerId );

this.timerId = null;

}

frame( nowTime ) {

if( nowTime > this.beforeTime + 100 ) {

this.beforeTime = nowTime;


if( 0 ) {

//文字列について

this.st = this.sts[ Math.floor( Math.random() * this.sts.length ) ];

this.cc.font = this.stFont;

this.textLen = this.cc.measureText( this.st ).width;

this.textXMax = this.cc.canvas.width - this.textLen * 2;

this.textYMax = this.cc.canvas.height - this.textLen * 2;

this.textX = this.textLen / 2 + Math.random() * this.textXMax;

this.textY = this.textLen + Math.random() * this.textYMax;

this.textRotate = - Math.PI / 4 + Math.random() * Math.PI / 2;

}


for( let spring of this.springs ) {

spring.frame();

}


this.draw( this.cc );

}

this.timerId = requestAnimationFrame( this.frame.bind( this ) );

}//frame


draw( cc ) {

cc.fillStyle = "black";

cc.fillRect( 0, 0, cc.canvas.width, cc.canvas.height );


//下部の大きな水色の楕円

if( 0 ) {

cc.beginPath();

cc.ellipse( cc.canvas.width / 2, cc.canvas.height * 0.85, cc.canvas.width * .5, cc.canvas.width * .25, 0, 0, 6.28 );

cc.closePath();

cc.fillStyle = "lightblue";

cc.fill();

}


for( let spring of this.springs ) {

spring.draw( cc );

}



if( 0 ) {

//ビヨンセとか表示

cc.save();

cc.font = this.stFont;

cc.translate( this.textX, this.textY );

cc.rotate( this.textRotate );

cc.fillStyle = "orange";

cc.fillText( this.st, 0, 0 );

cc.strokeText( this.st, 0, 0 );

cc.restore();

}


//画面下部をWeb ページ題字のためにホワイトアウト

if( 1 ) {

cc.fillStyle = "rgba(0,0,0,.75)";

let rate = 0.82;

cc.fillRect( 0, cc.canvas.height * rate, cc.canvas.width, cc.canvas.height * ( 1 - rate ) );

}


//上部文字表示

cc.fillStyle = "white";

cc.font = "16px ''";

cc.fillText( "JavaScript の「bezierCurveTo()」と「怒涛の3D計算」を組み合わせて「バネ」を表現", 8, 16 );


}//draw

}//App


class Spring {

constructor( app, custom ) {


this.app = app;


//初期回転

this.iKaitenXZ = 0;

this.iKaitenXY = 0;

this.iKaitenZY = 0;


//上から見た図での回転アニメ

this.kaitenXZEn = 0; //回転有効無効

this.kaitenXZPlus = 0.02; //回転量

//横から見た図での回転アニメ

this.kaitenZYEn = 0;

this.kaitenZYPlus = 0.02;

//正面から見た図での回転アニメ

this.kaitenXYEn = 0;

this.kaitenXYPlus = 0.02;


this.nobiMin = .75; //ちぢみ最小

this.nobiMax = 10; //のばし最大

this.nobiPlus = 0.5; //伸び縮みスピード


this.makisu = 10; //ばねの巻き数

this.ringZoom = 3; //ばねの大きさ(拡大率)


this.posX = 0;

this.posY = 0;

this.posZ = 1000; //ばねの3D空間内の位置(奥行前後)


this.r = 128;

this.g = 128;

this.b = 128;

this.rRating = true;

this.gRating = true;

this.bRating = true;


Object.assign( this, custom );


//--ここまでカスタマイズ


//---

this.kaitenXZ = 0;

this.kaitenZY = 0;

this.kaitenXY = 0;

this.textX = 100;

this.textY = 100;

this.textRotate = 0.1;

this.nobiDir = -1;

this.nobi = this.nobiMin;


//ひとまき分のベジェデータ

this.ps = [

//円をたどる点 その1

{ x:23, y:-40, z:0 }, //ベジェハンドル1

{ x:40, y:-23, z:0 }, //ベジェハンドル2

{ x:40, y:0, z:0 }, //ベジェ終点


//円をたどる点 その2

{ x:40, y:23, z:0 },

{ x:23, y:40, z:0 },

{ x:0, y:40, z:0 },


//円をたどる点 その3

{ x:-23, y:40, z:0 },

{ x:-40, y:23, z:0 },

{ x:-40, y:0, z:0 },


//円をたどる点 その4

{ x:-40, y:-23, z:0 },

{ x:-23, y:-40, z:0 },

{ x:0, y:-40, z:0 },

]


}//constructor

frame() {


this.kaitenXZ += this.kaitenXZPlus;

//check.

if( this.kaitenXZ > Math.PI || this.kaitenXZ < 0 ) this.kaitenXZPlus *= -1;


this.kaitenZY += this.kaitenXZPlus;

//check.

if( this.kaitenZY > Math.PI || this.kaitenZY < 0 ) this.kaitenZYPlus *= -1;


this.kaitenXY += this.kaitenXYPlus;

//check.

if( this.kaitenXY > Math.PI || this.kaitenXY < 0 ) this.kaitenXYPlus *= -1;


this.nobi += this.nobiDir * this.nobiPlus;

//check. のびちぢみ

if( this.nobiDir == 1 && this.nobi >= this.nobiMax

|| this.nobiDir == -1 && this.nobi <= this.nobiMin )

this.nobiDir *= -1;


/*

どのプログラムでも、

もし順方向を 1、逆方向を -1 で判断しているなら、

方向の転換は、その変数に -1 を掛ければ良いです。

順方向だった時:  1 * -1 = -1 逆方向になった。

逆方向だった時: -1 * -1 = 1 順方向になった。

これは中学校の数学ですね。


「数学」が苦手な人は、小学校の算数の教科書1年から6年まですべてを

最初から理解しながら勉強していくとよいと思います。

わからないところは、インターネットで検索すれば教えてくれます。

インターネットは遊びの道具として使うなら、大いに応えてくれるし、

インターネットは学びの道具として使うなら、大いに応えてくれます。

私は最近インターネットに対してそんなふうに感じました。

遊びの道具としてだけ使うのはもったいない気がします。

子供のころに習ったものがわからなかった、としても、

大人になってから同じことを学ぶと、理解が進む場合が多くあると思います。

それがねらいどころです。

算数を終えたら、中学校数学を同じように、理解しながら勉強していきます。

そうすれば、上記の -1 * -1 = 1 というのが、

頭で考えるのではなく、実はみんなは(人々は)暗記しているだけなんだ、

というのがわかるかもしれません。


私は実際に、「小学校の算数の教科書1年から6年まですべてを

最初から理解しながら勉強していく」というのをやったわけではないので、

言っていることはいい加減かもしれません。

算数を勉強しなおすことが、どれだけ時間のかかる作業なのか、

どれだけ面倒なことなのかは、私にはわかりません。

でも、数学が苦手な人に対して、どうすればいいかと考えると、

そういう手段が思いつきます。

大人になってから算数、数学を習得して何の得になるのか?

今の仕事と無関係なのに、習得する意味はあるのか?

国語算数理科社会は生活の基本で、生活するうえで、それらが無ければ

いくつかの障害物(いろいろできない)とともに生活しなければならず、

国語算数理科社会という生活の基本があれば、生活上の障害物がなくなり、

生活で得をすることになると思います。

国語算数理科社会をまんべんなく勉強した私は生活の中で

大いに得をしている気がします。

勉強はわからないものがわかったときに「面白い!」と感じます。

「大人になって」「わからなかったものがわかる、面白い!」という2つのねらいどころ

で算数と数学を学ぶと良いんじゃないかと思います。


勉強していて、わからないところにぶつかり、ちょっと考えてもわからないとき

そのことを「自分が頭が悪いから」とか「劣等しているから」と条件反射のように

直感的に思う場面がありますが、そのわからないところは、頭の良い人、優秀な人でも、すぐにはわからないところであって、その人たちは「自分が頭が悪いから」とか「劣等しているから」とは考えずに、「保留」にします。すぐにはわからないことなので、後回しにしたり、周辺の知識をかき集めて知識を補充したりといったことを始めます。

話は長くなりますが、これは絵も同じで、ある程度絵を描ける人が、ちょっといつもと違う趣向の絵を描こうとしたとき、絵を描く自信があるのに、ヘタクソな結果になる場合があります。それはその人が絵が下手なのではなく、絵を描くために必要な資料や趣向の違うその絵を描く経験が足りていないからなんです。なんどもなんども絵を描いているといくつかコツを発見しますが、そのコツを備える前に描くからヘタクソになるんです。

すぐに「自分はダメだ」とは思わずに、小学校の算数や新しい趣向の絵の基本(やれば発見するコツ)をしっかりそろえる。またはそこは誰でもすぐにはわからない部分だとして「保留」にしておくとか、前進ばかりではなく、ぶつかったのなら無理に進もうとせず迂回路を取ることも必要です。

(以上考えて言っているだけなので、繰り返しになりますがいい加減かもしれません)

*/

}//frame


draw( cc ) {



cc.save();

cc.translate( cc.canvas.width / 2, cc.canvas.height / 2 );

cc.scale( 1, -1 );


cc.shadowColor = "white";

cc.shadowBlur = 10;

let lenZ = this.nobi * 3 * 4 * this.makisu; //のびきったときの長さ

// * 3 は下記 abc ごとにzを増やしている分

// * 4 は下記 for j の回数分

let minZ = this.posZ - lenZ / 2; //ばねのz方向の手前側端点位置。posZはばねの中心となる

let z = minZ;

for( let i = 0; i < this.makisu; i++ ) {

cc.beginPath();

z -= this.nobi; //←試行錯誤でやったので、作者もこの計算の意味を知らない

let p = this.d( Object.create( this.ps[ 11 ] ), z );

cc.moveTo( p.h, p.v );

//4点をたどり、円を1つ描く。a,bはベジェのハンドル、cはベジェの終点

for( let j = 0; j < 4; j++ ) {

let a = this.d( Object.create( this.ps[ j * 3 ] ), z ); //このd()が3D計算を行っている

z += this.nobi; //createでコピーしたほうをいじること

let b = this.d( Object.create( this.ps[ j * 3 + 1 ] ), z );

z += this.nobi; //ベジェのパラメタごとにzをずらして

let c = this.d( Object.create( this.ps[ j * 3 + 2 ] ), z ); //それでいいのか??

z += this.nobi;

//check. 不正描画軽減

if( a.z <= 0 || b.z <= 0 || c.z <= 0 ) continue;


cc.bezierCurveTo( a.h, a.v, b.h, b.v, c.h, c.v );

}


//遠近の度数

let rate = ( p.z - minZ ) / lenZ;


//線の太さの遠近感

if( 1 )

cc.lineWidth = 3 + 5 * ( 1 - rate );


//色の遠近感あり

let r = this.r * ( this.rRating ? rate : 1 );

let g = this.g * ( this.gRating ? rate : 1 );

let b = this.b * ( this.bRating ? rate : 1 );

cc.strokeStyle = "rgb(" + r + "," + g + "," + b +")";


cc.stroke();

}//for


cc.restore();


}//draw


d( p, z ) {


//円の大きさを拡大している

p.x *= this.ringZoom;

p.y *= this.ringZoom;


p.x += this.posX;

p.y += this.posY;


//3D空間内で回転

let res;


//xy平面で回転(正面から見た図で回転)

res = this.kaiten2( this.posX, this.posY, p.x, p.y, this.iKaitenXY + this.kaitenXYEn * this.kaitenXY );

p.x = res.X;

p.y = res.Y;


//zy平面で回転(横から見た図で回転)

res = this.kaiten2( this.posZ, this.posY, z, p.y, this.iKaitenZY + this.kaitenZYEn * this.kaitenZY );

z = res.X;

p.y = res.Y;


//xz平面で回転(上から見た図で回転)

res = this.kaiten2( this.posX, this.posZ, p.x, z, this.iKaitenXZ + this.kaitenXZEn * this.kaitenXZ );

p.x = res.X;

z = res.Y;


return {

h : p.x * ( this.app.s / z ) * this.app.zm, //3D座標を2D座標にする計算

v : p.y * ( this.app.s / z ) * this.app.zm,


z : z, //上記

//「//check. 不正描画軽減」と、

//「//遠近の度数」で使いたいのでzも入れておく。

}

}//d


kaiten2( centerX, centerY, x, y, theta2 ) {

//数学の三角関数による座標回転計算

x -= centerX;

y -= centerY;

let theta1 = Math.atan2( y, x );

let hankei = Math.sqrt( x * x + y * y );

let kaitenX = Math.cos( theta1 + theta2 ) * hankei;

let kaitenY = Math.sin( theta1 + theta2 ) * hankei;

kaitenX += centerX;

kaitenY += centerY;

return { X : kaitenX, Y : kaitenY }

}//kaiten2

}//Spring


//check.

if( ! window.apps ) {

apps = new Array();

}


addEventListener( "load", function() {

app = new App( document.getElementById( "bezierTest" ) );

apps.push( app );

} );



実行

装飾版に比べてだいぶシンプルです。

プログラムを実行すると、青文字で start と書かれた場所から、赤文字で end と書かれた場所まで、CANVAS の beginPath(), closePath() による一本の描画パスでバネが描かれます。

bezierCurveTo() を使用してばねの曲線を描いていますが、どういうわけか 3D 空間を感じさせるような結果になっています。

2D描画専用のはずの bezierCurveTo() ですが、 bezierCurveTo() にセットする変数が「 3D 計算された値」ならば描くものは 3D になるんです。

これは bezierCurveTo() が 3D に対応しているということではなく、点の位置やベジェのハンドルの位置を 3D 空間内で計算し、それを 2D に投影したときの座標を bezierCurveTo() の引数に与えると、意図した 3D の様子を描いてくれる、というわけです。

別の話ですが、通常(私は)、3DCG の計算を行うときは、すべての点を 3DCG 計算済にしてから、描画処理に入るようにしていますが、今回に限っては、その「点」を描画する直前にその点だけについて個別に 3DCG 計算を行うようにしています。( d() 関数)

これは、

  • スプリングは円形状を繰り返す特殊な形をしていて、そのデータは円形状1つ分だけにしたい。
    つまりスプリングの巻き数が100回だからと言って、100個の円データを作りたくないと思った。
  • アニメーションする。

など考えた結果です。それで良かったかどうかはわかりません。おかしな感じになったなぁと思います。(draw() 関数内の for 文、120~150行付近)

<html><!--ESCAPEPROCESS-->

<head>

<meta content="text/html; charset=UTF-8" http-equiv="content-type">

<script>

console.clear();

// onclick = function() { location.reload( true ) }

// ondblclick = function() { location.assign( "https://192.168.11.3" +

</script>

<script>

presetNum = 0; //おまけ機能用


function onloadx() {

cc = document.getElementById( "test" ).getContext( "2d" );

cc.canvas.width = 512;

cc.canvas.height = 448;


//おまけ機能 「クリックすると撮影方法を変える」

onclick = function() {

presetNum ++;

presetNum %= 3; //値を0~2に直す計算

onloadx();

}


//---ここから カスタマイズ

nobiMin = 0.5; //ばねのちぢみ限度0~

nobiMax = 10; //ばねののばし限度10や20等

nobiPlus = 0.2; //のびちぢみ速度0.2や1等

makisu = 10; //ばね巻き数1~

ringZoom = 2; //ばねの大きさ0.5~5程度

//---ここまで カスタマイズ


//おまけ機能処理

//3DCGパラメタはプリセットを選べるようにしてみました。

switch( presetNum ) {

case 0:

presetName = "スナップ写真(立体感ほどほど)";

s = 30; //3DCG 焦点距離、レンズサイズmm

posZ = 1000; //3DCG ばねの位置(奥行)

zm = 30; //3DCG 引き伸ばし

break;

case 1:

presetName = "迫力(立体感強い)";

s = 5;

posZ = 600;

zm = 100;

break;

case 2:

presetName = "望遠(立体感少ない)";

s = 200;

posZ = 6000;

zm = 30;

break;

}


kaitenXZ = 0;

nobi = 1;

nobiDir = 1;


beforeTime = 0;

frame( 0 );

}

function frame( nowTime ) {

if( nowTime > beforeTime + 100 ) {

beforeTime = nowTime;


kaitenXZ += 0.02;

nobi += nobiDir * nobiPlus;

//check.

if( nobiDir == 1 && nobi >= nobiMax

|| nobiDir == -1 && nobi <= nobiMin ) {

nobiDir *= -1;

}


draw( cc );

}

requestAnimationFrame( frame );

}

function draw( cc ) {

//画面クリア

cc.fillStyle = "white";

cc.fillRect( 0, 0, cc.canvas.width, cc.canvas.height );


//おまけ機能状態表示

cc.fillStyle = "black";

cc.fillText( "クリックまたはタッチすると撮影方法を変えます", 10, 10 );

cc.fillStyle = "blue";

cc.fillText( "プリセット:" + presetName, 10, 25 );


cc.save();

cc.translate( cc.canvas.width / 2, cc.canvas.height / 2 );


ps = [

//円を形作る上下左右の4点のうち上点から右点への曲線

{ x:23, y:-40, z:0 }, //ベジェ第1引数 ハンドル

{ x:40, y:-23, z:0 }, //ベジェ第2引数 ハンドル

{ x:40, y:0, z:0 }, //ベジェ第3引数 終点


//円を形作る上下左右の4点のうち右点から下点への曲線

{ x:40, y:23, z:0 }, //なお、この z:0 は使っていません

{ x:23, y:40, z:0 }, //別の z 値を使っています

{ x:0, y:40, z:0 },


//円を形作る上下左右の4点のうち下点から左点への曲線

{ x:-23, y:40, z:0 },

{ x:-40, y:23, z:0 },

{ x:-40, y:0, z:0 },


//円を形作る上下左右の4点のうち左点から上点への曲線

{ x:-40, y:-23, z:0 },

{ x:-23, y:-40, z:0 },

{ x:0, y:-40, z:0 },

]

cc.beginPath();

z = posZ - nobi * 3 * 4 * makisu / 2;

// * 3 はベジェのパラメタ下記abc3つ分

// * 4 は円を形作る点4つ分

//posZが中心となるようなzの初期値を求めている。


//パス描画開始は円を形作る上下左右の4点のうち上点の位置(ps[ 11 ])から始めて、

p = d( Object.create( ps[ 11 ] ), z );

//配列の要素(ps[ 11 ] = オブジェクト)をそのまま渡すと

//参照渡しになり、d()関数がマスターデータのpsを

//書き換えてしまうので、createでコピーを渡す。

cc.moveTo( p.h, p.v );


//開始点を示すガイド表示

cc.fillStyle = "blue";

cc.fillRect( p.h - 2, p.v - 2, 4, 4 );

cc.fillText( "start", p.h, p.v );


//そのあとはzをずらしながらグルグルとやっていく。

let a, b, c;

for( let i = 0; i < makisu; i++ ) {

for( let j = 0; j < 4; j++ ) {


a = d( Object.create( ps[ j * 3 ] ), z );

z += nobi;


b = d( Object.create( ps[ j * 3 + 1 ] ), z );

z += nobi;


c = d( Object.create( ps[ j * 3 + 2 ] ), z );

z += nobi;


cc.bezierCurveTo( a.h, a.v, b.h, b.v, c.h, c.v );

//パラメタごとにz値をずらしているのは

//それが理屈で正しいからではなく、

//適当で結果オーライでやっています。

//でもzが少しずつずれているハンドルの様子を想像してみると

//きれいな曲線を作りそうな気がします。

}

}

cc.strokeStyle = "black";

cc.stroke();


//終了点を示すガイド表示

cc.fillStyle = "red";

cc.fillRect( c.h - 2, c.v - 2, 4, 4 );

cc.fillText( "end", c.h, c.v );


cc.restore();


}//draw


function d( p, z ) {


p.x *= ringZoom;

p.y *= ringZoom;


//xz平面で回転

let res = kaiten2( 0, posZ, p.x, z, kaitenXZ );

p.x = res.X;

z = res.Y;


return {

h : p.x * ( s / z ) * zm,

v : p.y * ( s / z ) * zm,

}

}

function kaiten2( centerX, centerY, x, y, theta2 ) {

//数学の三角関数による座標回転計算

x -= centerX;

y -= centerY;

let theta1 = Math.atan2( y, x );

let hankei = Math.sqrt( x * x + y * y );

let kaitenX = Math.cos( theta1 + theta2 ) * hankei;

let kaitenY = Math.sin( theta1 + theta2 ) * hankei;

kaitenX += centerX;

kaitenY += centerY;

return { X : kaitenX, Y : kaitenY }

}//kaiten2


</script>

<style>

</style>

</head>

<body onload="onloadx()">

<canvas id="test" style="

object-fit : contain;

width : 100%;

height : 100%;

">

</canvas>

</body>

</html>




近況


今年2022年、3月14日に突然身体が不調になる。具体的には、身体がフラフラとし、息切れがひどい。大企業に派遣されて働いているが、バターンと倒れては困るので、そうなる前に欠勤して休むことにした。

症状が直らないので、3月中頃から「休職」とした。契約社員以上、正社員以下の準社員ではあるけど、時給で働いているので、休職=収入ストップ。貯金が無くなると生活できなくなる。

身体の不調とは別件で(もしかしたら関連している?)、4月末に耳鼻科の手術で4日間入院。

鼻の奥を綺麗に洗浄したり滅菌したりしたわけだけど、退院後、いまいち鼻の調子が良くないけど、直ったんだろうか??と疑問に思っている。

ちなみに鼻は元は歯医者で上の歯を抜歯した際に抜歯の穴と鼻の奥の空洞が貫通してしまい、口の中の雑菌が鼻の中へ侵入してその症状になってしまった。歯性上顎洞炎という病名だが、わかりやすく言うと副鼻腔炎、もっとわかりやすく言うと蓄膿症。

生命保険には2つ入っているので、入院手術費用は何とかなる。

問題は休職による収入ストップだが、身体の検査を一通り行い、異常がないので、あとは。ということで心療内科にかかる。

心療内科で国の制度の「傷病手当」の申請をお願いしたところ OK となったので、収入の問題は、(まだ心配ではあるけど)一応、なんとかなったと言えそう。

で、毎日働かず、部屋で遊んでばかりいると、将来まずいことになる気がするので、社会に対しては「ガンバリ」を見せなければならないと思い、電子機器組立て1級の受験の準備を始めた。しかしなんと!!!

なんと!!!

…写真は関係ないんですけど、なんと、合格していたと思っていた「1級学科」が、合格取り消しになってしまった。

受検には受験資格というものがあり、「2級合格後、3年実務に従事したのち、1級を受検できる」という条件が設定されていて、私はそれに気づかず、2年半くらいで受検申請してしまい、受け付けた国も資格がないことに気付かず、受検票を発行してしまい、学科と実技の試験を私は受けてしまったんです。実技はダメでしたが、学科は合格。それが3年くらい前の話です。そして今回、事務の方が初めて気が付いて、いろいろ話し合った結果「学科合格取り消し」となったわけでした。

で、今学科と実技を両方、せっせと鍛えているところです。

上の写真は私が自分で作成した電子機器組立て用の練習基板です。IC や抵抗のはんだ付けだけを試せる基板で、回路はダミー(意味なし)です。「サンハヤト」という会社が、個人で基板を生成するツール一式を販売していて、私はそれを購入して使っています。回路を透明シートに印刷し、銅箔だけの基板にシート越しに紫外線を当て、化学反応を起こし、その基板を、溶液に浸すと不要な銅箔が溶け回路の銅箔だけが残る、という「エッチング」という方法で基板を作るものです。一式そろえると5万円くらいするものですが、当時の会社でもらったボーナスで購入しました。6年以上前の話です。

趣味のプログラミングのほうは、その「電子機器組立て」の試験で、基板の配線を自分で設計するという試験問題があり、それを実物の基板なしでパソコン上で配線を試せる、というソフトウェアを作ろうとしています。

これがそのソフトウェアの開発中の画面です。

基板上に載っている黒い長方形の IC の一番左上の小さな灰色の端子と、基板上のたくさん並んだ黄色いランド(はんだ付けする小さな銅箔)の1つは、データとしてつながりがあります。ワイヤー(軟銅線)で部品の端子同士を接続し、最終的に正しい接続が行われているかどうかチェックを行うことができます。

まぁ、そんなことやって時間を取ってしまい、練習時間の不足で不合格になると大変なので、なるべく手短に仕上げたいと思っているところです。

ところで、ちょっと暇があれば、「はじめて読む486」の本も読み進めていて、もうすぐ読み終わりそう。「仮想86モード」の章を読み終えることが出来れば、「PC-9801スーパーテクニック」という本に載っていた、CPU判別プログラムで、「今、仮想86モードです」と結果を出すところを見られると思うんです。それが1つの大きな目的で…

そしてさらに、今月のこのWeb ページの扉絵のビヨヨンのバネのプログラムを思い付きで作ったり、RPG のメニューのプログラムとかも進めたいんですが、そんなことやってると合格なんかできませんよ、と。

心療内科でもらった薬がちょっと「夢うつつ」になる感じがちょっとあって、それだといろいろ進められないんじゃないか、と心配しています。

それとは別件で、老化のせいか、頭の回転もだいぶ鈍っていて、昔やっていたことが今では2倍の時間をかけて行っている始末。それも今まで頑張って仕事に従事して、(笑い話ですが)残業300時間の世界を通り抜けて、なんとか耐えてきた結果(社会につくした結果)なのだと思えば、理解できるようなできないような。

とまぁ、以上、何一つ隠していない、私の完ぺきな近況でした。

さて、学科の勉強を始めるとしよう。はりきっていきましょうね。


(訪問者のどんなニーズと この記事がつながるか)